{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "indoor-accounting",
   "metadata": {},
   "source": [
    "# The Simple Conv"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "southern-spending",
   "metadata": {},
   "source": [
    "## import dependency and prepare dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "negative-kidney",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn,optim\n",
    "from torch.nn import functional as F, Sequential as Seq, Module\n",
    "from torchvision import datasets,transforms\n",
    "from torch.utils.data import Dataset,DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "flexible-stocks",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\CreatorFan\\AppData\\Roaming\\Python\\Python38\\site-packages\\torchvision\\datasets\\mnist.py:498: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at  ..\\torch\\csrc\\utils\\tensor_numpy.cpp:180.)\n",
      "  return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)\n"
     ]
    }
   ],
   "source": [
    "train_data_transformer = transforms.Compose(\n",
    "    [\n",
    "     transforms.RandomHorizontalFlip(),\n",
    "     transforms.RandomInvert(),\n",
    "     transforms.RandomGrayscale(),\n",
    "     transforms.ToTensor()\n",
    "    ])\n",
    "\n",
    "train_data = datasets.MNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=train_data_transformer\n",
    ")\n",
    "\n",
    "\n",
    "test_data = datasets.MNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=transforms.ToTensor()\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "level-rescue",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of input samples [N, C, H, W]:  torch.Size([64, 1, 28, 28])\n",
      "Shape of output samples:  torch.Size([64]) torch.int64\n"
     ]
    }
   ],
   "source": [
    "batch_size = 64\n",
    "\n",
    "# Create data loaders.\n",
    "train_dataloader = DataLoader(train_data, batch_size=batch_size)\n",
    "\n",
    "for X, y in train_dataloader:\n",
    "    print(\"Shape of input samples [N, C, H, W]: \", X.shape)\n",
    "    print(\"Shape of output samples: \", y.shape, y.dtype)\n",
    "    break"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "falling-winning",
   "metadata": {},
   "source": [
    "## build model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "acknowledged-raleigh",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Net(Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv = Seq(\n",
    "            # 1@28x28\n",
    "            nn.Conv2d(1,8,3),\n",
    "            # 3@26x26\n",
    "            nn.Conv2d(8,16,3),\n",
    "            # 6@24x24\n",
    "            nn.MaxPool2d(2,2), \n",
    "            # 6@12x12\n",
    "            nn.BatchNorm2d(16),\n",
    "            nn.ReLU(),\n",
    "            # 6@12x12\n",
    "            nn.Conv2d(16,32,3),\n",
    "            # 12@10x10\n",
    "            nn.Conv2d(32,64,3),\n",
    "            # 16@8x8\n",
    "            nn.MaxPool2d(2,2),\n",
    "            # 16@4x4\n",
    "            nn.BatchNorm2d(64),\n",
    "            nn.ReLU()\n",
    "            # 16@4x4\n",
    "        )\n",
    "        self.fc = Seq(\n",
    "            nn.Linear(64 * 4 * 4, 64),\n",
    "            nn.ReLU(),\n",
    "            nn.Dropout(),\n",
    "            nn.Linear(64,10),\n",
    "#             nn.Linear(16 * 4 * 4, 10),\n",
    "            nn.Softmax(dim=1)\n",
    "        )\n",
    "    \n",
    "    def forward(self,x):\n",
    "        x = self.conv(x)\n",
    "        x = x.view(-1, 64 * 4 * 4)\n",
    "        x = self.fc(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "accurate-manufacturer",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(dataloader, model, loss_fn, optimizer):\n",
    "    size = len(dataloader.dataset)\n",
    "    model.train()\n",
    "    for batch, (X, y) in enumerate(dataloader):\n",
    "        pred = model(X)\n",
    "        loss = loss_fn(pred, y)\n",
    "\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        if batch % 100 == 0:\n",
    "            loss, current = loss.item(), batch * len(X)\n",
    "            print(f\"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]\")\n",
    "            \n",
    "def test(model,test_data,loss_fn):\n",
    "    test_dataloader = DataLoader(test_data,batch_size=len(test_data))\n",
    "    model.eval()\n",
    "    with torch.no_grad():\n",
    "        for data,gt in test_dataloader:\n",
    "            pred = model(data)\n",
    "            n = len(gt)\n",
    "            loss = loss_fn(pred,gt).item()\n",
    "            return sum(pred.argmax(dim=1)==gt).item()/n,loss/n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "coated-legislation",
   "metadata": {},
   "outputs": [],
   "source": [
    "net = Net()\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "# criterion = FocalLoss()\n",
    "optimizer = optim.Adam(net.parameters())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "assisted-telephone",
   "metadata": {},
   "source": [
    "## Train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "divine-zambia",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\CreatorFan\\AppData\\Roaming\\Python\\Python38\\site-packages\\torch\\nn\\functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  ..\\c10/core/TensorImpl.h:1156.)\n",
      "  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1\n",
      "-------------------------------\n",
      "loss: 2.301353  [    0/60000]\n",
      "loss: 1.791114  [ 6400/60000]\n",
      "loss: 1.670273  [12800/60000]\n",
      "loss: 1.572050  [19200/60000]\n",
      "loss: 1.615607  [25600/60000]\n",
      "loss: 1.597416  [32000/60000]\n",
      "loss: 1.526368  [38400/60000]\n",
      "loss: 1.553821  [44800/60000]\n",
      "loss: 1.591539  [51200/60000]\n",
      "loss: 1.546257  [57600/60000]\n",
      "Test Error: \n",
      " Accuracy: 95.2%, Avg loss: 0.000151 \n",
      "\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "epochs = 1\n",
    "for epoch in range(epochs):\n",
    "    print(f\"Epoch {epoch+1}\\n-------------------------------\")\n",
    "    train(train_dataloader, net, criterion, optimizer)\n",
    "    correct,loss = test(net,test_data,criterion)\n",
    "    print(f\"Test Error: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {loss:>8f} \\n\")\n",
    "#     correct,loss = test(net,train_data,criterion)\n",
    "#     print(f\"Train Error: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {loss:>8f} \\n\")\n",
    "print(\"Done!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "prostate-directory",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9521, 0.0001513139009475708)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test(net,test_data,criterion)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "prompt-planet",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 36 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "cnums = 9\n",
    "rnums = 4\n",
    "fig,axes = plt.subplots(rnums,cnums)\n",
    "for i,(X,y) in enumerate(DataLoader(test_data,batch_size = 1,shuffle=True)):\n",
    "    r =int(i / cnums)\n",
    "    c = i % cnums\n",
    "    if r >= rnums:\n",
    "        break\n",
    "    axes[r][c].imshow(X.view(28,28),cmap=\"Reds\")\n",
    "    axes[r][c].get_xaxis().set_visible(False)\n",
    "    axes[r][c].get_yaxis().set_visible(False)\n",
    "    axes[r][c].set_title(f'pred:{net(X).argmax(dim=1).item()}')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "hairy-stake",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
